package cn.edu.njtc.service;

import cn.edu.njtc.entity.dto.DoctorLoginDto;
import cn.edu.njtc.entity.dto.DoctorRegisterDto;
import cn.edu.njtc.entity.dto.DoctorTokenDto;
import cn.edu.njtc.entity.pojo.Doctor;
import cn.edu.njtc.entity.pojo.DoctorDetail;
import cn.edu.njtc.exception.BizException;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 医生服务接口
 */
public interface DoctorService extends IService<Doctor> {
    // IService 提供了基本的 CRUD 操作

    /**
     * 保存医生及其详细信息（新增操作）
     * @param doctor 医生基本信息
     * @param doctorDetail 医生详细信息
     * @return 是否成功
     */
    boolean saveDoctorAndDetail(Doctor doctor, DoctorDetail doctorDetail);

    /**
     * 根据医生ID获取医生及其详细信息
     * @param doctorId 医生ID
     * @return 包含医生基本信息和详细信息的组合对象（或者直接返回 Doctor 实体，通过关联查询填充）
     * 这里为了简化，我们先返回 Doctor，实际项目中可能返回一个VO或DTO
     */
    Doctor getDoctorWithDetail(Integer doctorId); // 考虑到 DoctorDetail 的主键与 Doctor 相同，可以考虑返回 Doctor 或一个DTO

    /**
     * 更新医生及其详细信息
     * @param doctor 医生基本信息
     * @param doctorDetail 医生详细信息
     * @return 是否成功
     */
    boolean updateDoctorAndDetail(Doctor doctor, DoctorDetail doctorDetail);

    /**
     * 根据医生ID删除医生及其详细信息 (逻辑删除)
     * @param doctorId 医生ID
     * @return 是否成功
     */
    boolean deleteDoctorAndDetail(Integer doctorId);
    int register(DoctorRegisterDto doctorRegisterDto) throws BizException;

    DoctorTokenDto login(DoctorLoginDto doctorLoginDto) throws BizException;
}
